'\" te
.\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH GSS_ADD_CRED 3GSS "Jun 30, 2005"
.SH NAME
gss_add_cred \- add a credential-element to a credential
.SH SYNOPSIS
.LP
.nf
\fBcc\fR [ \fIflag\fR... ] \fIfile\fR... \fB-lgss\fR [ \fIlibrary\fR... ]
#include <gssapi/gssapi.h>

\fBOM_uint32\fR \fBgss_add_cred\fR(\fBOM_uint32 *\fR\fIminor_status\fR,
     \fBconst gss_cred_id_t\fR \fIinput_cred_handle\fR,
     \fBconst gss_name_t\fR \fIdesired_name\fR,
     \fBconst gss_OID\fR \fIdesired_mech\fR,
     \fBgss_cred_usage_t\fR \fIcred_usage\fR,
     \fBOM_uint32\fR \fIinitiator_time_req\fR,
     \fBOM_uint32\fR \fIacceptor_time_req\fR,
     \fBgss_cred_id_t *\fR\fIoutput_cred_handle\fR,
     \fBgss_OID_set *\fR\fIactual_mechs\fR,
     \fBOM_uint32 *\fR\fIinitiator_time_rec\fR,
     \fBOM_uint32 *\fR\fIacceptor_time_rec\fR);
.fi

.SH PARAMETERS
.sp
.LP
The parameter descriptions for \fBgss_add_cred()\fR follow:
.sp
.ne 2
.na
\fB\fIminor_status\fR\fR
.ad
.RS 22n
Mechanism specific status code.
.RE

.sp
.ne 2
.na
\fB\fIinput_cred_handle\fR\fR
.ad
.RS 22n
Credential to which the credential-element is added. If
\fBGSS_C_NO_CREDENTIAL\fR is specified, the function composes the new
credential based on default behavior. While the credential-handle is not
modified by \fBgss_add_cred()\fR, the underlying credential is modified if
\fIoutput_credential_handle\fR is \fBNULL\fR.
.RE

.sp
.ne 2
.na
\fB\fIdesired_name\fR\fR
.ad
.RS 22n
Name of the principal for which a credential should be acquired.
.RE

.sp
.ne 2
.na
\fB\fIdesired_mech\fR\fR
.ad
.RS 22n
Underlying security mechanism with which the credential can be used.
GSS_C_NULL_OID can be used to obtain a default.
.RE

.sp
.ne 2
.na
\fB\fIcred_usage\fR\fR
.ad
.RS 22n
Flag that indicates how a credential is used to initiate or accept security
credentials. If the flag is \fBGSS_C_ACCEPT\fR, the credentials are used only
to accept security credentials. If the flag is \fBGSS_C_INITIATE\fR, the
credentials are used only to initiate security credentials. If the flag is
GSS_C_BOTH, the credentials can be used to either initiate or accept security
contexts.
.RE

.sp
.ne 2
.na
\fB\fIinitiator_time_req\fR\fR
.ad
.RS 22n
Number of seconds that the credential may remain valid for initiating security
contexts. This argument is ignored if the composed credentials are of the
\fBGSS_C_ACCEPT\fR type. Specify \fBGSS_C_INDEFINITE\fR to request that the
credentials have the maximum permitted initiator lifetime.
.RE

.sp
.ne 2
.na
\fB\fIacceptor_time_req\fR\fR
.ad
.RS 22n
Number of seconds that the credential may remain valid for accepting security
contexts. This argument is ignored if the composed credentials are of the
\fBGSS_C_INITIATE\fR type. Specify \fBGSS_C_INDEFINITE\fR to request that the
credentials have the maximum permitted initiator lifetime.
.RE

.sp
.ne 2
.na
\fB\fIoutput_cred_handle\fR\fR
.ad
.RS 22n
Returned credential handle that contains the new credential-element and all the
credential-elements from \fIinput_cred_handle\fR. If a valid pointer to a
\fBgss_cred_id_t\fR is supplied for this parameter, \fBgss_add_cred()\fR
creates a new credential handle that contains all credential-elements from
\fIinput_cred_handle\fR and the newly acquired credential-element. If
\fBNULL\fR is specified for this parameter, the newly acquired
credential-element is added to the credential identified by
\fIinput_cred_handle\fR.
.sp
The resources associated with any credential handle returned by means of this
parameter must be released by the application after use by a call to
\fBgss_release_cred\fR(3GSS).
.RE

.sp
.ne 2
.na
\fB\fIactual_mechs\fR\fR
.ad
.RS 22n
Complete set of mechanisms for which the new credential is valid. Storage for
the returned \fBOID\fR-set must be freed by the application after use by a call
to \fBgss_release_oid_set\fR(3GSS). Specify \fBNULL\fR if this parameter is not
required.
.RE

.sp
.ne 2
.na
\fB\fIinitiator_time_rec\fR\fR
.ad
.RS 22n
Actual number of seconds for which the returned credentials remain valid for
initiating contexts using the specified mechanism. If a mechanism does not
support expiration of credentials, the value \fBGSS_C_INDEFINITE\fR is
returned. Specify \fBNULL\fR if this parameter is not required.
.RE

.sp
.ne 2
.na
\fB\fIacceptor_time_rec\fR\fR
.ad
.RS 22n
Actual number of seconds for which the returned credentials remain valid for
accepting security contexts using the specified mechanism. If a mechanism does
not support expiration of credentials, the value \fBGSS_C_INDEFINITE\fR is
returned. Specify \fBNULL\fR if this parameter is not required.
.RE

.SH DESCRIPTION
.sp
.LP
The \fBgss_add_cred()\fR function adds a credential-element to a credential.
The credential-element is identified by the name of the principal to which it
refers. This function is not intended as a function to login to the network. A
function for login to the network would involve creating new mechanism-specific
authentication data, rather than acquiring a handle to existing data.
.sp
.LP
If the value of \fIdesired_name\fR is \fBGSS_C_NO_NAME\fR, the call is
interpreted as a request to add a credential-element to invoke default behavior
when passed to \fBgss_init_sec_context\fR(3GSS) if the value of
\fIcred_usage\fR is \fBGSS_C_INITIATE\fR or \fBGSS_C_BOTH\fR. The call is also
interpreted as a request to add a credential-element to the invoke default
behavior when passed to \fBgss_accept_sec_context\fR(3GSS) if the value of
\fIcred_usage\fR is \fBGSS_C_ACCEPT\fR or \fBGSS_C_BOTH\fR.
.sp
.LP
The \fBgss_add_cred()\fR function is expected to be used primarily by context
acceptors. The \fBGSS-API\fR provides mechanism-specific ways to obtain
\fBGSS-API\fR initiator credentials through the system login process.
Consequently, the \fBGSS-API\fR does not support acquiring \fBGSS_C_INITIATE\fR
or \fBGSS_C_BOTH\fR credentials by means of \fBgss_acquire_cred\fR(3GSS) for
any name other than the following:
.RS +4
.TP
.ie t \(bu
.el o
\fBGSS_C_NO_NAME\fR
.RE
.RS +4
.TP
.ie t \(bu
.el o
Name produced by \fBgss_inquire_cred\fR(3GSS) applied to a valid credential
.RE
.RS +4
.TP
.ie t \(bu
.el o
Name produced by \fBgss_inquire_context\fR(3GSS) applied to an active context
.RE
.sp
.LP
If credential acquisition is time consuming for a mechanism, the mechanism can
choose to delay the actual acquisition until the credential is required by
\fBgss_init_sec_context\fR(3GSS), for example, or by
\fBgss_accept_sec_context\fR(3GSS). Such mechanism-specific implementation
decisions are invisible to the calling application. A call to
\fBgss_inquire_cred\fR(3GSS) immediately following the call
\fBgss_add_cred()\fR returns valid credential data as well as incurring the
overhead of deferred credential acquisition.
.sp
.LP
The \fBgss_add_cred()\fR function can be used either to compose a new
credential that contains all credential-elements of the original in addition to
the newly-acquired credential-element. The function can also be used to add the
new credential-element to an existing credential. If the value of the
\fIoutput_cred_handle\fR parameter is \fBNULL\fR, the new credential-element is
added to the credential identified by \fIinput_cred_handle\fR. If a valid
pointer is specified for the \fIoutput_cred_handle\fR parameter, a new
credential handle is created.
.sp
.LP
If the value of \fIinput_cred_handle\fR is \fBGSS_C_NO_CREDENTIAL\fR, the
\fBgss_add_cred()\fR function composes a credential and sets the
\fIoutput_cred_handle\fR parameter based on the default behavior. The call has
the same effect as a call first made by the application to
\fBgss_acquire_cred\fR(3GSS) to specify the same usage and to pass
\fBGSS_C_NO_NAME\fR as the \fIdesired_name\fR parameter. Such an application
call obtains an explicit credential handle that incorporates the default
behaviors, then passes the credential handle to \fBgss_add_cred()\fR, and
finally calls \fBgss_release_cred\fR(3GSS) on the first credential handle.
.sp
.LP
If the value of the \fIinput_cred_handle\fR parameter is
\fBGSS_C_NO_CREDENTIAL\fR, a non-\fBNULL\fR value must be supplied for the
\fIoutput_cred_handle\fR parameter.
.SH RETURN VALUES
.sp
.LP
The \fBgss_add_cred()\fR function can return the following status codes:
.sp
.ne 2
.na
\fB\fBGSS_S_COMPLETE\fR\fR
.ad
.RS 29n
Successful completion.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_BAD_MECH\fR\fR
.ad
.RS 29n
An unavailable mechanism has been requested.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_BAD_NAMETYPE\fR\fR
.ad
.RS 29n
The type contained within the \fIdesired_name\fR parameter is not supported.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_BAD_NAME\fR\fR
.ad
.RS 29n
The value supplied for \fIdesired_name\fR parameter is ill formed.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_DUPLICATE_ELEMENT\fR\fR
.ad
.RS 29n
The credential already contains an element for the requested mechanism that has
overlapping usage and validity period.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_CREDENTIALS_EXPIRED\fR\fR
.ad
.RS 29n
The credentials could not be added because they have expired.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_NO_CRED\fR\fR
.ad
.RS 29n
No credentials were found for the specified name.
.RE

.sp
.ne 2
.na
\fB\fBGSS_S_FAILURE\fR\fR
.ad
.RS 29n
The underlying mechanism detected an error for which no specific \fBGSS\fR
status code is defined. The mechanism-specific status code reported by means of
the \fIminor_status\fR parameter details the error condition.
.RE

.SH ATTRIBUTES
.sp
.LP
See \fBattributes\fR(7) for descriptions of the following attributes:
.sp

.sp
.TS
box;
c | c
l | l .
ATTRIBUTE TYPE	ATTRIBUTE VALUE
_
MT-Level	Safe
.TE

.SH SEE ALSO
.sp
.LP
.BR gss_accept_sec_context (3GSS),
.BR gss_acquire_cred (3GSS),
.BR gss_init_sec_context (3GSS),
.BR gss_inquire_context (3GSS),
.BR gss_inquire_cred (3GSS),
.BR gss_release_cred (3GSS),
.BR gss_release_oid_set (3GSS),
.BR libgss (3LIB),
.BR attributes (7)
.sp
.LP
\fISolaris Security for Developers Guide\fR
